package teaching.io.advance;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import teaching.io.temp.TextFileFilter;

/**
 * 压缩输出流示例。
 * 
 * @author deng.zhao
 *
 */
public class ZipOutputStreamExample {

	public static void main(String[] args) {
		// 新建文件对象，存储路径，后继代码将操作此路径下的数据；
		File path = new File("d:/");

		// 创建压缩输出流，进行压缩操作；
		try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("d:/test.zip"));) {
			// 为压缩文件设置注释；
			zipOutputStream.setComment("ZipOutputStreamExample");
			// 循环读取路径下的文本文件；
			for (File file : path.listFiles(new TextFileFilter())) {
				// 为当前文件新建压缩项；
				ZipEntry zipEntry = new ZipEntry(file.getName());
				// 将其加入到压缩输出流中，开始写出；
				zipOutputStream.putNextEntry(zipEntry);
				// 创建文件输入流，读取当前文件信息，同时写出到输出流中；
				try (InputStream fileInputStream = new FileInputStream(file);) {
					int temp;
					while ((temp = fileInputStream.read()) != -1) {
						zipOutputStream.write(temp);
					}
				}
				// 关闭输出项；
				zipOutputStream.closeEntry();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		System.out.println("OK!");
	}

}
